package kin.manager.security;

import java.util.List;

import kin.bean.security.Acl;
import kin.bean.security.AclId;
import kin.bean.security.Module;

public interface AclManager {
	public List<Acl> findAll();

	/**
	 * 增加或修改授权
	 * 
	 * @param principalType
	 *            主体类型
	 * @param principalId
	 *            主体ID
	 * @param moduleId
	 *            资源模块ID
	 * @param permission
	 *            C/R/U/D操作
	 * @param yes
	 *            是否允许操作
	 */
	public void addOrUpdatePermission(String principalType, int principalId,
			int moduleId, int permission, boolean yes);

	/**
	 * 删除授权
	 * 
	 * @param principalType
	 *            主体类型(用户|角色)
	 * @param principalId
	 *            主体ID(用户ID|角色ID)
	 * @param moduleId
	 *            资源模块ID
	 */
	public void delPermission(String principalType, int principalId,
			int moduleId);

	/**
	 * 增加或修改用户的继承特性
	 * 
	 * @param userId
	 *            用户ID
	 * @param moduleId
	 *            资源模块ID
	 * @param yes
	 *            是否继承
	 */
	public void addOrUpdateUserExtends(int userId, int moduleId, boolean yes);

	/**
	 * 该用户是否对资源拥有权限
	 * 
	 * @paramserId 用户ID
	 * @param moduleId
	 *            资源模块ID
	 * @param permission
	 *            操作C/R/U/D
	 * @return 是否
	 */
	public boolean hasPermission(int userId, int moduleId, int permission);

	/**
	 * 查找用户所拥有读取权限的模块列表
	 * 
	 * @param userId
	 *            用户ID
	 * @return 模块列表
	 */
	public List<Module> findModulesByUser(int userId);

	/**
	 * 查找某用户的某个角色的所有权限
	 * 
	 * @param userId
	 *            用户ID
	 * @return 权限列表
	 */
	public List findPermissionsByRole(int userId);

	/**
	 * 
	 * @param userId
	 */
	public void delPermissionsByRole(int userId);

	// public List searchAclRecord(String principalType,int principalId);
	public AclId findAclId(String principalType, int principalId, int moduleId);

	public void delPermissionsByModule(int moduleId, int permission);

	public void delAclByModule(int moduleId);
	
	public List<Acl> findByUser(String principalType,int userId);
}
